본 게시글의 원문은 Yann Debray의 MATLAB with Python Book 입니다. 해당 책은 MIT 라이센스를 따르기 때문에 개인적으로 번역하여 재배포 합니다. 본 포스팅에는 추후 유료 수익을 위한 광고가 부착될 수도 있습니다.

MIT License

Copyright (c) 2023 Yann Debray

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

본 게시물에서 활용된 소스 코드들은 모두 Yann Debray의 GitHub Repo에서 확인할 수 있습니다.

3.6. Python 개발 환경 설정하기

Python과 과학 계산을 위한 관련 패키지를 설치한 후에도 MATLAB 통합 개발 환경 (IDE)와 같은 경험을 제공하지는 않습니다.

두 가지 핵심 오픈 소스 기술이 기술 계산 환경을 재정의하는 데 기여하고 있습니다:

  • Jupyter 노트북
  • Visual Studio Code

이들은 언어개발 환경 간의 상호 작용 방식을 재정의하고 있습니다. Jupyter로 먼저 대화형 컴퓨팅을 위한 개방형 표준을 만들고, VS Code Language Server Protocol을 통해 IDE에서 다중 언어에 대한 풍부한 상호 작용을 추가하고 있습니다.

3.6.1. Jupyter 노트북

Jupyter 노트북은 시간이 지남에 따라 가장 많이 사용되고 사랑받는 데이터 과학 도구 중 하나가 되었습니다. 이들은 텍스트 (Markdown 형식), 코드 및 출력 (숫자 및 그래픽)을 결합합니다. 노트북은 데이터 과학자가 목표, 방법 및 결과를 전달하는 데 도움을 줍니다. 이는 교과서나 과학 논문의 실행 가능한 형태로 볼 수 있습니다.

Jupyter는 Julia, Python 및 R의 약자이지만, 또한 갈릴레오가 목성의 위성을 발견한 기록에 경의를 표하는 것입니다. 이러한 노트북은 아마도 과학의 초기 예시 중 하나로, 데이터와 서술 형식의 논문이었습니다. 갈릴레오가 1610년에 “천체신문”을 발표한 때 (그의 최초의 과학 논문 중 하나), 실제로 코드와 데이터를 포함하여 관측 결과를 발표했습니다. 그것은 밤의 날짜와 상태에 대한 기록이었습니다. 데이터와 메타데이터, 그리고 서술이 포함되어 있었습니다.

Jupyter는 2014년에 IPython에서 분리된 프로젝트입니다. IPython은 Interactive Python의 약자로, 2001년에 Fernando Perez가 만들었습니다. 그는 Maple과 Mathematica가 모두 노트북 환경을 갖고 있던 것에서 영감을 받았습니다. 그는 Python 언어를 정말 좋아했지만 과학적 컴퓨팅을 위해 대화식 프롬프트의 제한을 느꼈습니다. 그래서 상태를 유지하고 이전 결과를 재사용할 수 있는 기능을 제공하며 Numeric 라이브러리와 Gnuplot을 로드하는 좋은 기능을 추가하기 위해 파이썬 시작 파일을 작성했습니다. ‘ipython-0.0.1’이라는 이름의 코드가 탄생했는데, 이는 단지 259줄의 $PYTHONSTARTUP으로 로드할 수 있는 코드였습니다.

2006년경, IPython 프로젝트는 Sage라는 다른 오픈 소스 프로젝트에서 영감을 얻었습니다. Sage 노트북은 노트북 작업을 위해 파일 시스템을 사용하는 방식을 취했습니다. ls로 파일을 의미 있게 나열하거나 cd로 디렉토리를 변경하여 파일 시스템을 탐색할 수 없었습니다. Sage는 코드를 숨겨진 디렉토리에서 실행하며, 각 셀이 실제로 별도의 하위 디렉토리인 방식으로 동작했습니다.

2010년에 IPython의 아키텍처는 Python 코드를 실행하는 커널과 커뮤니케이션하는 노트북 프론트 엔드를 분리하고 이 둘 간의 통신을 ZeroMQ 프로토콜을 통해 이루어지도록 발전했습니다. 이러한 디자인으로 Qt 클라이언트, Visual Studio 확장 및 마지막으로 웹 프론트 엔드 개발이 가능해졌습니다.

IPython은 Jupyter로 발전하면서 언어에 중립적인 특성을 갖추게 되었습니다. Jupyter는 Julia, R, Haskell, Ruby, 물론 Python (IPython 커널을 통해) 및 MATLAB (커뮤니티에 의해 유지되는 커널로서 MATLAB Engine을 기반으로 구축됨)을 포함한 수십 개의 언어에서 실행 환경 (커널)을 지원합니다.

요약하면, Jupyter는 현대 과학 컴퓨팅 스택에 다음과 같은 3가지 주요 구성 요소를 제공합니다:

Jupyter가 데이터 과학 분야에서 광범위하게 성공한 사례 중 일부는 다음과 같은 생태계에서의 추가 기능 개발로 나타납니다:

  • Google Colab에서 노트북 실행
  • GitHub에서 노트북 렌더링

Jupyter에 대해 더 알아보기:

3.6.2. Jupyter를 위한 MATLAB 통합

MathWorks는 2023년 1월에 공식 Jupyter 커널을 출시했습니다. 이 외에도 JupyterHub 서버 설치 내에서 MATLAB 전체 환경을 앱으로 통합하는 방법도 있습니다. 이 앱은 ‘새로 만들기’ 메뉴에서 쉽게 찾을 수 있거나 JupyterLab을 사용하고 있다면 런처 아이콘으로 나타납니다:

JupyterHub 서버에 이를 설치하는 방법은 다음 링크에서 확인할 수 있습니다:

  • https://github.com/mathworks/jupyter-matlab-proxy
  • https://www.mathworks.com/products/reference-architectures/jupyter.html
  • https://blogs.mathworks.com/matlab/2023/01/30/official-mathworks-matlab-kernel-for-jupyter-released/

3.6.3. Visual Studio Code

저는 Jupyter/IPython Notebook ipynb 파일을 지원하는 Visual Studio Code를 사용하기 시작했습니다.

기타 통합 개발 환경과 마찬가지로, VS Code는 여러 언어 (Python, JavaScript 등)에서 스크립트를 작성하고 실행하는 기능을 지원합니다.

Eclipse의 구성 요소화 접근 방식과의 큰 차이점은 Language Server Protocol라 불리는 웹 표준의 채택입니다:

이를 통해 개발 도구와 언어 서버 간에 더 풍부한 상호작용이 가능해집니다. 또한 모든 것이 웹 기술을 기반으로 하기 때문에 웹 버전을 vscode.dev에서 액세스할 수 있습니다. HTML/JS와 같은 웹 언어와는 달리 이는 브라우저에서 실행되는 인터프리터가 필요하거나 연결할 서버가 필요하므로 Python 실행을 지원하지 않습니다. Pyodide를 기반으로 한 몇 가지 해킹 방법이 존재합니다 (Python을 WebAssembly로 변환한 것).